import axios from "axios";


// 使用element-ui Message做消息提醒
// import { Message } from 'element-ui';



// const instance = axios.create({
//   baseURL: '127.0.0.1',
//   timeout: 5000,
// })

// instance.interceptors.request.use(config => {
//   return config
// }, error => {
//   console.log(error);
// })

// instance.interceptors.response.use(result => {
//   return result
// }, error => {
//   console.log(error);
// })

//创建一个新的axios实例
const service = axios.create({
  baseURL:  process.env.NODE_ENV == 'production' ?  process.env.VUE_APP_BASE_API : '',
  // baseURL: 'https://www.bilibili.com',
  //设置超时时间，超过该时间就不会发起请求
  timeout: 3000
})


service.interceptors.request.use(config => {
  config.data = JSON.stringify(config.data); //数据转化,也可以使用qs转换
  config.headers = {
    'Content-Type': 'application/json' //配置请求头
  }
  const token = ''//配置token

  if (token) {
    // config.params = { 'token': token } //如果要求携带在参数中
    // config.headers.token = token; //如果要求携带在请求头中
    config.headers.accessToken = token; //如果要求携带accessToken
  }
  return config
},
  error => {
    console.log(error);
    return Promise.reject(error)
  }
)


// 3.响应拦截器

//   一个错误网址请求对应一个Message弹窗.

service.interceptors.response.use(response => {
  //接收到响应数据并成功后的一些共有的处理，关闭loading等
  return response
}, error => {
  /***** 接收到异常响应的处理开始 *****/
  if (error && error.response) {
    // 1.公共错误处理
    // 2.根据响应码具体处理
    switch (error.response.status) {
      case 400:
        error.message = '错误请求(400)'
        break;
      case 401:
        error.message = '未授权，请重新登录(401)'
        break;
      case 403:
        error.message = '拒绝访问(403)'
        break;
      case 404:
        error.message = '请求网址域名错误,未找到该网页资源(404 not found)'
        // window.location.href = "/NotFound"
        break;
      case 405:
        error.message = '请求类型未允许(405 Method not allowed)'
        break;
      case 406:
        error.message = '(请求不接受 406)无法使用请求的内容特性响应请求的网页'
        break;
      case 407:
        error.message = '该IP服务被禁止(407),请开启代理授权'
        break;
      case 408:
        error.message = '请求超时(408)'
        break;
      case 409:
        error.message = '(服务器冲突 409) 服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息'
        break;
      case 410:
        error.message = '（服务器资源不存在 410）请求的资源已永久删除'
        break;
      case 411:
        error.message = '(需要有效长度 411） 服务器不接受不含有效内容长度标头字段的请求'
        break;
      case 412:
        error.message = '(未满足前提条件 412） 服务器未满足请求者在请求中设置的其中一个前提条件'
        break;
      case 413:
        error.message = '（请求实体过大 413） 服务器无法处理请求，因为请求实体过大，超出服务器的处理能力'
        break;
      case 414:
        error.message = '（请求的URI过长 414） 请求的URI过长，服务器无法处理。'
        break;
      case 415:
        error.message = '（不支持的媒体类型 415） 请求的格式不受请求页面的支持'
        break;
      case 416:
        error.message = '（请求范围不符合要求 416） 如果页面无法提供请求的范围，则服务器会返回此状态代码'
        break;
      case 417:
        error.message = '（未满足期望值 417） 服务器未满足”期望”请求标头字段的要求'
        break;
      case 500:
        error.message = '服务器端出错(500)'
        break;
      case 501:
        error.message = '服务器不具备完成请求的功能(501)'
        break;
      case 502:
        error.message = '网络错误,服务器端无响应(502)'
        break;
      case 503:
        error.message = '服务不可用(503)'
        break;
      case 504:
        error.message = '网关超时(504)'
        break;
      case 505:
        error.message = '（HTTP版本不受支持 505)服务器不支持请求中所用的HTTP协议版本'
        break;
      default:
        error.message = `连接错误${error.response.status}`
    }
  } else {
    // 超时处理
    if (JSON.stringify(error).includes('timeout')) {
      Message.error('服务器响应超时，请刷新当前页')
    }
    error.message = '连接服务器失败'
  }

  Message.error(error.message)
  /***** 处理结束 *****/
  tryHideFullScreenLoading();
  return Promise.resolve(error.response)
})


export default service